package hoodoos.rule.script.graphics.compiler.generator;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

/**
 * 不要轻易的修改这里的代码，除非你知道影响点
 * <p>
 * 这个代码主要为了给 Java 进行扩展使用的。如果不知道哪里用到了，直接使用全局搜索
 */
public class StringFunction {

  public static boolean inThenEmptyToFalse(String ruleParam, String param) {
    return isNotBlank(ruleParam) && param.contains(ruleParam);
  }

  /**
   * @param ruleParam 实际执行过程中获取的参数
   * @param param 图形规则配置的参数
   */
  public static boolean notInThenEmptyToFalse(String ruleParam, String param) {
    if (isBlank(ruleParam)) {
      return true;
    }
    return !param.contains(ruleParam);
  }

  public static boolean equals(String ruleParam, String param) {
    return Objects.equals(ruleParam, param);
  }

  public static boolean isBlank(String string) {
    if (string == null || string.length() == 0) {
      return true;
    }
    int strLen = string.length();
    for (int i = 0; i < strLen; ++i) {
      if (!Character.isWhitespace(string.charAt(i))) {
        return false;
      }
    }
    return true;
  }

  public static boolean isNotBlank(String string) {
    return !isBlank(string);
  }

  /**
   * 参数包含指定的值按英文逗号分割之后的数组的成员
   */
  public static boolean containsStringArrayMember(String sourceParam, String targetParam) {
    if (sourceParam == null || targetParam == null) {
      return false;
    }
    String[] targetArray = targetParam.split(",");
    for (String s : targetArray) {
      if (sourceParam.contains(s)) {
        return true;
      }
    }
    return false;
  }

  /**
   * 参数是指定的值按英文逗号分割之后的数组的成员
   */
  public static boolean memberOfStringArray(String sourceParam, String targetParam) {
    String[] targetArray = targetParam.split(",");
    for (String s : targetArray) {
      if (sourceParam.equals(s)) {
        return true;
      }
    }
    return false;
  }

  /**
   * 该方法名已经被使用，并作为 Java 的一个扩展方法，不要修改方法名
   */
  public static boolean splitIn(String sourceParam, String targetParam, String separator) {
    String[] sourceArray = sourceParam.split(separator);
    String[] targetArray = targetParam.split(",");

    if (sourceArray.length == 1 || targetArray.length == 1) {
      return sourceArray[0].equals(targetArray[0]);
    } else {
      Set<String> targetSet = new HashSet<>(Arrays.asList(targetArray));
      for (String s1 : sourceArray) {
        if (targetSet.contains(s1)) {
          return true;
        }
      }
    }
    return false;
  }
}
